import org.junit.Test;

import java.util.Arrays;

/**
 * 数组   Array
 * 数组相当于一堆相同的数据
 */
public class 数组 {
    //1.数组定义：4种，创建数组初始化【静态初始化：给定值|动态初始化：无给定制】
    @Test
    public void testArray(){
        //注意：数组长度固定，不可改变
        int[] arr1=new int[4];//Java推荐写法   动态初始化
        int arr2[]=new int[4];//C推荐写法Java兼容，动态初始化
        int[] arr3={1,2,3};//静态初始化数组，元素可以直接使用
        int[] arr4=new int[]{1,2,3};//动态初始化
        //数组：内部存的数据叫元素？
        //从arr3中取出 2这个元素   数组名  下标(从0开始）
        System.out.println(arr3[1]);
        //从arr3数组的长度  长度：length
        System.out.println(arr3.length);
        //从arr4获取到第4个元素值   数组下标越界异常，下标超出数组长度范围  下标为2可以运行，不超出数组长度范围
        //System.out.println(arr4[4]);//报错  ArrayIndexOutOfBoundsException: 4
    }
    /**
     * 数组的迭代（遍历：输出数组所有元素的值）有三种
     * 1.普通迭代方式：for
     * 2.增强for方式（推荐）：JOK1.5之后
     * 3.工具类：Arrays
     */
    @Test
    public void testIterate(){
        int[] arr={1,2,3,4};//静态初始化数组    数组名+下标
        //for(int i=0;i<arr.length;i++){//拿数组下标
        //    System.out.println(arr[i]);
        //}
          //增强for jdk1.5  遍历数据的目的：拿取元素  相同类型才可以拿去元素，不同类型会报错
        //for (int j:arr){//增强for语法：（遍历数据类型  引用：数组名）
        //    System.out.println(j);
        //}
          //工具类：Arrays.toString()直接打印数组元素值
        System.out.println(Arrays.toString(arr));
    }
    /**
     * 数组扩容：数组长度固定，不可改变【可以使用扩容改变数组长度】
     */
    @Test
    public void testCopy(){
        //字符数组,数组长度固定为：2个
        char[] arr={'唐','山'};//想法：长度增加为4
        //扩容：增加为4个  克隆新的数组
       char[] temp=Arrays.copyOf(arr,4);
       arr=temp;
       arr[2]='工';
       arr[3]='业';
        System.out.println(arr);
        //需求：输出唐山工业
    }
    /**
     * 数组输出元素时，会有一些不同 【查看数据是否为数组】
     * 数据类型：基础数据类型+引用类型
     */
    @Test
    public void testArrays(){
        //字符数组
        char[] china={'中','国'};
        System.out.println(china);//输出：中国   字符串：字符数组
        //输出语句---javaOOP面向对象：重载，字符数组自动拼接
        //数值数组
        int[] i={1,2};
        System.out.println(i);//输出：[I（数据类型）@（连接符）3d82c5f3（地址值）
    }
    /**
     * 冒号排序：双重for循环使用：外层for执行一次，执行全部
     */
    @Test
    public void bubbleleSort(){
        //静态初始化数组
        int[] arr={1,4,2,6,5};//升序输出
        //① 外层for控制轮次  i=1,2,4,5,6   4轮
        for (int i=0;i< arr.length-1;i++){
            //②内层for控制次  j=4轮递减-1
            for (int j=0;j<arr.length-1-i;j++){
                //③交换：第一个元素比第二个元素大，条件成立，交换【升序】
                if (arr[j]>arr[j+1]){//【相邻元素】 数组名+下标
                    //创建第三方数组，接收   变量名：temp
                    int temp=arr[j];//大的元素交给第三方变量保存
                    arr[j]=arr[j+1];//将第二个元素交给第一个元素位置
                    arr[j+1]=temp;//将保存的第三方变量【大数】交给第二元素位置
                }
            }
        }
        System.out.println(Arrays.toString(arr));//输出数组【遍历数组】
    }
    @Test
    public void testSort(){
        int[] arr={3,6,4,1};
        //工具类：Arrays.sort()方法排序，默认升序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }


}
